// 导入express模块
const express = require('express')

const router = express.Router()

const article_handler = require('../router_handler/article')

// 导入验证表单数据的中间件
const expressJoi = require('@escook/express-joi')
const {add_article_schema, update_article_schema, get_article_schema, delete_article_schema} = require('../schema/article')



//导入解析formdata格式表单数据的包
const multer = require('multer')
//导入处理路径的核心模块
const path = require('path')

//创建multer的实例对象，通过dest属性指定文件的存放路径
// const upload = multer({dest: path.join(__dirname, '../uploads'), fileFilter})



//////////////////////配置并创建multer的实例对象，可以控制文件上传类型/////////////////////////////////////
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
      // 设置文件存储的目录
      cb(null, path.join(__dirname, '../uploads/article'));
    },
    filename: function (req, file, cb) {
      // 设置文件的名称
      cb(null, file.fieldname + '-' + Date.now() + '-' + Math.floor(Math.random() * 1E5) + '-' + file.originalname);
    }
  });
  
  const fileFilter = function (req, file, cb) {
    // 检查文件类型，只允许上传图片类型
    if (file.mimetype.startsWith('image/')) {
      cb(null, true);
    } else {
      cb(new Error('只允许上传图片类型！'), false);
    }
  };
  
  const upload = multer({ storage: storage, fileFilter: fileFilter });

//////////////////////////////////////////////////////////



// 发布新文章的路由
// upload.single()是一个局部生效的中间件，用来解析FormData格式的表单数据
// 将文件类型的数据，解析并挂载到req.file属性中
// 将文本类型的数据，解析并挂载到req.body属性中
// 在当前的路由中，先后使用了两个中间件，先使用multer解析表单数据，后使用expressJoi对解析的表单数据进行验证
router.post('/add', upload.single('cover_img'), expressJoi(add_article_schema), article_handler.addArticle)

//更新文章
router.put('/info', upload.single('cover_img'), expressJoi(update_article_schema), article_handler.updateArticle)

//获取文章详情
router.get('/info', expressJoi(get_article_schema), article_handler.getArticleById)

//删除文章
router.delete('/info', expressJoi(delete_article_schema), article_handler.deleteArticleById)

//获取文章列表
router.get('/list', article_handler.getArticleList)


module.exports = router